home *** CD-ROM | disk | FTP | other *** search
/ Die Speccy' 97 / Die Speccy' 97.iso / amiga_system / the_aminet / comm / bbs / amms20d.lha / amms / mbbatch / com / select < prev    next >
Text File  |  1995-05-19  |  8KB  |  351 lines

  1. ;
  2. ;    NAME : SELECT
  3. ;
  4. ;    VERSION : $VER: 3.01 / 19.05.1995
  5. ;
  6. ;    FUNKTION : Auswahlprogramm fuer Bretter und Filebretter
  7. ;
  8. ;    AUFRUF : SELECT
  9. ;
  10. ;    AUTOR : Markus Marquardt
  11. ;
  12. ;    Diese Batchdatei benutzt folgende Befehle :
  13. ;    -------------------------------------------
  14. ;    CD
  15. ;    CHECK BOARD
  16. ;    CHECK FBOARD
  17. ;    DISK EXECUTE
  18. ;    ECHO
  19. ;    EXTERN
  20. ;    FILES
  21. ;    GET DIR
  22. ;    GOSUB
  23. ;    GOTO
  24. ;    IF
  25. ;    MENU
  26. ;    READ
  27. ;    RETURN
  28. ;
  29. ;    Voreinstellungen
  30. ;
  31. SCRSTART = 1                ; Nr. 1. Zeile auf Bildschirm
  32. SCRLINES = {APAGE}-SCRSTART+1-2        ; Anzahl Zeilen auf Bildschirm
  33. PATHLINE = SCRLINES+1            ; Zeile fuer Pfad
  34. STATLINE = SCRLINES+2            ; Zeile fuer Status etc.
  35. ;
  36. ;    ***** Proggy *****
  37. ;
  38.  
  39. ;
  40. ;    Sprachabhaengige Texte einlesen
  41. ;
  42.  
  43. LANG={DEFLANGUAGE}
  44. _check file "mbbatch:com/'{ALANGUAGE}'/select.bat" GETTEXT
  45. LANG={ALANGUAGE}
  46. GETTEXT:
  47. _disk execute/keep "mbbatch:com/'LANG'/select.bat"
  48.  
  49. ;
  50. ;    Eigentlicher Programmstart
  51. ;
  52.  
  53. LEV=0                    ; Zaehler fuer Sprung in UnterDirs
  54.  
  55. S_NEWDIR:
  56. BN=0                    ; Brettnummer auf Screen
  57. FIRSTB=1                ; Nr. 1. Brett auf Screen
  58.  
  59. S_RESCAN:
  60. _gosub GETDIR
  61. _if/i FIRSTB+BN >= BANZ then BN=0    ; evtl. BN korrigieren
  62.  
  63. S_REFRESH:
  64. _echo/nolf PATHTEXT            ; Pfad ausgeben
  65. _echo/nolf HELPTEXT            ; Helpzeile ausgeben
  66.  
  67. SANZ=SCRLINES*3                ; Anzahl Bretter
  68. _if/i FIRSTB+SANZ > BANZ then SANZ=BANZ-FIRSTB+1 ; evtl. begrenzen
  69. SCL=SCRLINES                ; Anzeigezeilen = max.
  70. _if/i SCL > SANZ then SCL=SANZ        ; evtl. begrenzen
  71.  
  72. I=BN                    ; BN merken
  73. _gosub PRINTDIR
  74. BN=I                    ; altes BN holen
  75.  
  76. S_LOOP:
  77. RBN=BN+FIRSTB                ; Brettnummer
  78. _gosub SC                ; Cursor setzen
  79.  
  80. S_MENU:
  81. _menu/noecho/nopmsgs "" -
  82. KEY_QUIT S_QUIT "^M" S_SEL "^1" S_UP "^2" S_DOWN "^3" S_LEFT "^4" S_RIGHT -
  83. KEY_MARK S_MARK KEY_NEXT S_NEXT KEY_LAST S_LAST
  84.  
  85. ;    ***** Funktion BRETT WAEHLEN *****
  86.  
  87. S_SEL:                    ; Aktuelles Brett gewaehlt
  88. BNAME=BNAME'RBN'
  89. _if BTYP'RBN' == "M" then _goto S_READ    ; Lesen im Brett
  90. _if BTYP'RBN' == "F" then _goto S_FILES    ; Files
  91.  
  92. ;    Es war ein Dir
  93.  
  94. _if BNAME == "/" then _goto S_SEL_PARENT ; wenn ParentDir, verzw.
  95.  
  96. FIRSTB'LEV'=FIRSTB            ; Position im Dir merken
  97. BN'LEV'=BN
  98. LEV=LEV+1                ; Zaehler erhoehen
  99.  
  100. _cd "'BNAME'"                ; CD auf das Dir
  101. _goto S_NEWDIR                ; -> Alles von vorne
  102.  
  103. S_SEL_PARENT:                ; ParentDir angewaehlt
  104. _cd /
  105. _if/i LEV == 0 then _goto S_NEWDIR    ; Wenn hoeher als vorher, pech
  106. LEV=LEV-1
  107. FIRSTB=FIRSTB'LEV'            ; Alte Position holen
  108. BN=BN'LEV'
  109. FIRSTB'LEV'=
  110. BN'LEV'=
  111. _goto S_RESCAN
  112.  
  113. S_READ:                    ; LESEN
  114. _echo/nolf "#reset##cls##home#"
  115. _read "'BNAME'"
  116. _goto S_REFRESH
  117.  
  118. S_FILES:                ; FILES
  119. _echo/nolf "#reset##cls##home#"
  120. _files "'BNAME'"
  121. _goto S_REFRESH
  122.  
  123. ;    ***** FUNKTION QUIT *****
  124.  
  125. S_QUIT:                    ; QUIT
  126. _echo/nolf "#reset##cls##home#"
  127. _eod
  128.  
  129. ;       ***** Funktion CURSOR HOCH *****
  130.  
  131. S_UP:
  132. _gosub CC                ; Cursor loeschen
  133. _if/i BN == 0 then BN=SANZ        ; Wenn ganz oben war, zum letzten
  134. BN=BN-1                    ; Boardnr. -1
  135. _goto S_LOOP
  136.  
  137. ;    ***** Funktion CURSOR RUNTER *****
  138.  
  139. S_DOWN:                    ; Cursor nach unten
  140. _gosub CC                ; Cursor loeschen
  141. _if/i BN == SANZ-1 then BN=-1        ; Wenn ganz untern, zum 1.
  142. BN=BN+1
  143. _goto S_LOOP
  144.  
  145. ;    ***** Funktion CURSOR LINKS *****
  146.  
  147. S_LEFT:                    ; Cursor nach links
  148. _gosub CC                ; Cursor loeschen
  149. _if/i BN-SCL < 0 then BN=BN+SANZ/(SCL+1)*SCL-(BN+1+SANZ/(SCL+1)*SCL)/(SANZ+1)*SCL+SCL
  150. BN=BN-SCL                ; neue Brettnummer
  151. _goto S_LOOP
  152.  
  153. ;    ***** Funktion CURSOR RECHTS *****
  154.  
  155. S_RIGHT:                ; Cursor nach rechts
  156. _gosub CC                ; Cursor loeschen
  157. _if/i BN+SCL >= SANZ then BN=BN%SCL-SCL
  158. BN=BN+SCL
  159. _goto S_LOOP
  160.  
  161. ;    ***** Funktion SEITE VOR *****
  162.  
  163. S_NEXT:
  164. _if/i FIRSTB+SCRLINES*3 > BANZ then _goto S_MENU ; Wenn nix mehr da, nix
  165. FIRSTB=FIRSTB+SCRLINES*3        ; Nummer 1. Brett hochsetzen
  166. _if/i FIRSTB+SCRLINES*3 > BANZ then FIRSTB=BANZ-SCRLINES*3+1 ; Evtl. begr.
  167. _goto S_REFRESH                ; und neu aufbauen alles
  168.  
  169. ;    ***** Funktion SEITE ZURUECK *****
  170.  
  171. S_LAST:
  172. _if/i FIRSTB == 1 then _goto S_MENU    ; Wenn schon auf 1. nix machen
  173. FIRSTB=FIRSTB-SCRLINES*3
  174. _if/i FIRSTB < 1 then FIRSTB=1        ; Evtl. begrenzen
  175. _goto S_REFRESH                ; und neu aufbauen alles
  176.  
  177. ;    ***** Funktion MARK *****
  178.  
  179. S_MARK:
  180. BNAME=BNAME'RBN'
  181. _if BTYP'RBN' == "D" then _goto S_MARK_DIR ; wenn Dir, verzw.
  182.  
  183. _gosub CC                ; Cursor loeschen
  184.  
  185. _if BTYP'RBN' == "M" then MARKCOM="_read"  ; Wenn MsgBrett, dann mit Read
  186. _if BTYP'RBN' == "F" then MARKCOM="_files" ; Wenn FileBrett dann mit Files
  187.  
  188. _if BMRK'RBN' == "*" then _goto S_MARK_WECH ; Wenn schon markiert, entmarkieren
  189.  
  190. I=1+8                    ; Markieren
  191. BMRK'RBN'="*"
  192. _echo/nolf " *"                ; * ausgeben
  193. _goto S_MARK_YO
  194.  
  195. S_MARK_WECH:
  196. I=2+8                    ; Entmarkieren
  197. BMRK'RBN'=" "
  198. _echo/nolf "  "                ; * loeschen
  199.  
  200. S_MARK_YO:
  201. 'MARKCOM'/action='i' "'BNAME'"        ; Read/Files mit /action=x aufrufen
  202.  
  203. _goto S_LOOP
  204.  
  205. S_MARK_DIR:
  206. _if BNAME == "/" then _goto S_MENU    ; Wenn /, keine Reaktion
  207.  
  208. _cd "'BNAME'"                ; In Dir gehen
  209.  
  210. _menu/noecho/nopmsgs MARKMENU -
  211. KEY_MARKDIR S_MARK_DIRM KEY_UNMARKDIR S_MARK_DIRU KEY_ABORT S_MARK_DIRA
  212.  
  213. S_MARK_DIRM:
  214. I=1+8                    ; Wert /Action
  215. _gosub MB                ; Alles markieren
  216. _goto S_MARK_DIRA            ; und Ende
  217.  
  218. S_MARK_DIRU:
  219. I=2+8                    ; Wert /Action
  220. _gosub MB                ; Alles entmarkieren
  221.  
  222. S_MARK_DIRA:
  223. _cd /                    ; Ins Parent-Dir zurueck
  224. _echo/nolf HELPTEXT            ; Helpzeile ausgeben
  225. _goto S_LOOP                ; und zurueck
  226.  
  227. ;
  228. ;-----------------------------------------------------------------------------
  229. ;    SC : Cursor auf Position fuer Brett BN setzen und ausgeben.
  230. ;
  231. SC:
  232. SC_L=BN%SCRLINES+SCRSTART        ; Zeilennr.
  233. SC_C=BN/SCRLINES*26+1            ; Spaltennummer
  234. _echo/nolf "#setpos 'SC_L','SC_C'#>#left#"
  235. _return
  236.  
  237. ;
  238. ;-----------------------------------------------------------------------------
  239. ;    CC : Cursor auf Position fuer Brett BN setzen und loeschen
  240. ;
  241. CC:
  242. SC_L=BN%SCRLINES+SCRSTART        ; Zeilennr.
  243. SC_C=BN/SCRLINES*26+1            ; Spaltennummer
  244. _echo/nolf "#setpos 'SC_L','SC_C'# "
  245. _return
  246.  
  247. ;
  248. ;-----------------------------------------------------------------------------
  249. ;    PRINTDIR : Ausgeben des aktuellen Directory-Inhaltes.
  250. ;
  251. ;    Die Namen/Typen der Bretter muessen in den Variablen
  252. ;    BNAME1...BNAMEn und BTYP1...BTYPn stehen, BANZ muss
  253. ;    die Anzahl der Bretter enthalten.
  254. ;
  255. PRINTDIR:
  256. BN=0                    ; Aktuelle Brettnummer
  257. RBN=FIRSTB                ; Variablennummer
  258.  
  259. PRINTDIR_LOOP:
  260. _if/i RBN >  BANZ then _return
  261. _if/i BN  == SANZ then _return
  262.  
  263. _gosub CC                ; Cursor setzen
  264.  
  265. STR=BNAME'RBN'
  266. MRK=BMRK'RBN'
  267.  
  268. _if BTYP'RBN' == "M" then STR=" 'MRK' #vfarbe 2#'STR'#reset#"
  269. _if BTYP'RBN' == "F" then STR=" 'MRK' #vfarbe 6#'STR'#reset#"
  270. _if BTYP'RBN' == "D" then STR=" 'MRK' #vfarbe 1#'STR'#reset#"
  271.  
  272. _echo/nolf STR                ; Brettname ausgeben
  273.  
  274. BN=BN+1                    ; Zaehler +1
  275. RBN=RBN+1
  276. _goto PRINTDIR_LOOP            ; Weiter
  277.  
  278. ;
  279. ;-----------------------------------------------------------------------------
  280. ;    GETDIR : Auslesen des aktuellen Directories
  281. ;
  282. ;    Es werden die Variablen BNAME1...BNAMEn (Name des entspr.
  283. ;    Brettes) und BTYP1...BTYPn (Typ des Brettes, M = Msg, F = File
  284. ;    und D = Dir) gesetzt. In BANZ wird die Anzahl der Bretter
  285. ;    gesetzt.
  286. ;
  287. GETDIR:
  288. BANZ=0                    ; Anzahl auf 0
  289.  
  290. ;       Nach UnterDirs im Dir suchen
  291.  
  292. BNAME=""                ; Aktueller Boardname
  293.  
  294. _if {cdpath} == ":" then _goto GETDIR_DLOOP
  295.  
  296. BANZ=BANZ+1                ; 1. Eintrag = Parent
  297. BNAME1="/"
  298. BTYP1="D"
  299. BMRK1=" "
  300.  
  301. GETDIR_DLOOP:
  302. _get dir/dirs "'BNAME'" BNAME        ; Naechsten Eintrag holen
  303. _if BNAME == "" then _goto GETDIR_M    ; Wenn Leer -> MsgBoards suchen
  304. BANZ=BANZ+1                ; Brettanzahl erhoehen
  305. BNAME'BANZ'="'BNAME'/"            ; Name in Variable BNAMEn
  306. BTYP'BANZ'="D"                ; Typ auf Directory
  307. BMRK'BANZ'=" "                ; auf nicht markiert
  308. _goto GETDIR_DLOOP
  309.  
  310. ;    Nach MsgBrettern im Dir suchen
  311.  
  312. GETDIR_M:
  313. BNAME=""                ; Aktueller Boardname
  314.  
  315. GETDIR_MLOOP:
  316. _get dir/boards "'BNAME'" BNAME        ; Naechsten Eintrag holen
  317. _if BNAME == "" then _goto GETDIR_F    ; Wenn Leer -> nach FileBoards suchen
  318. BANZ=BANZ+1                ; Brettanzahl erhoehen
  319. BNAME'BANZ'=BNAME            ; Name in Variable BNAMEn
  320. BTYP'BANZ'="M"                ; Typ auf MsgBrett
  321. BMRK'BANZ'=" "                ; auf nicht markiert
  322. _check board/boardlist "'BNAME'" GETDIR_MLOOP ; markiert ?
  323. BMRK'BANZ'="*"                ; auf markiert
  324. _goto GETDIR_MLOOP
  325.  
  326. ;    Nach FileBrettern im Dir suchen
  327.  
  328. GETDIR_F:
  329. BNAME=""                ; Aktueller Boardname
  330.  
  331. GETDIR_FLOOP:
  332. _get dir/fboards "'BNAME'" BNAME    ; Naechsten Eintrag holen
  333. _if BNAME == "" then _return        ; Wenn Leer -> Ende
  334. BANZ=BANZ+1                ; Brettanzahl erhoehen
  335. BNAME'BANZ'=BNAME            ; Name in Variable BNAMEn
  336. BTYP'BANZ'="F"                ; Typ auf FileBrett
  337. BMRK'BANZ'=" "                ; Auf nicht markiert
  338. _check fboard/boardlist "'BNAME'" GETDIR_FLOOP ; markiert ?
  339. BMRK'BANZ'="*"                ; Auf markiert
  340. _goto GETDIR_FLOOP
  341.  
  342. ;
  343. ;-----------------------------------------------------------------------------
  344. ;    MB : Rekursives (ent)Markieren von Brettern, auch in Unterdirs
  345. ;         In der Variable I wird der Wert fuer Force uebergeben !
  346. ;
  347. MB:
  348. _read/action='I' *
  349. _files/action='I' *
  350. _return
  351.